Telegram Group & Telegram Channel
Зачем [[nodiscard]] нужен не только для возврата значения

Если ты думаешь, что [[nodiscard]] — это просто защита от игнора Result, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.

Пример:


struct [[nodiscard]] Error {
std::string message;
};

Error do_something() {
return {"Что-то пошло не так"};
}

void foo() {
do_something(); // warning: ignoring return value of nodiscard type
}


А теперь магия с методами:


struct Connection {
[[nodiscard]] bool is_valid() const {
return valid_;
}

private:
bool valid_ = false;
};

void check_connection(const Connection& conn) {
conn.is_valid(); // warning: result of 'is_valid' is unused
}


📌 Даже если функция возвращает bool — компилятор предупредит, если ты его проигнорируешь. Это круто, когда метод что-то проверяет, ищет или сигналит об ошибке — и ты точно не хочешь забыть проверить результат.

⚠️ Но аккуратно: [[nodiscard]] не бросает исключения и не делает функцию безопасной. Это подсказка компилятору и твой напарник по коду.

Если хочешь писать более надёжный и самодокументируемый код — юзай [[nodiscard]] не только по дефолту, а осознанно.

➡️ @cpp_geek



tg-me.com/cpp_geek/328
Create:
Last Update:

Зачем [[nodiscard]] нужен не только для возврата значения

Если ты думаешь, что [[nodiscard]] — это просто защита от игнора Result, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.

Пример:


struct [[nodiscard]] Error {
std::string message;
};

Error do_something() {
return {"Что-то пошло не так"};
}

void foo() {
do_something(); // warning: ignoring return value of nodiscard type
}


А теперь магия с методами:


struct Connection {
[[nodiscard]] bool is_valid() const {
return valid_;
}

private:
bool valid_ = false;
};

void check_connection(const Connection& conn) {
conn.is_valid(); // warning: result of 'is_valid' is unused
}


📌 Даже если функция возвращает bool — компилятор предупредит, если ты его проигнорируешь. Это круто, когда метод что-то проверяет, ищет или сигналит об ошибке — и ты точно не хочешь забыть проверить результат.

⚠️ Но аккуратно: [[nodiscard]] не бросает исключения и не делает функцию безопасной. Это подсказка компилятору и твой напарник по коду.

Если хочешь писать более надёжный и самодокументируемый код — юзай [[nodiscard]] не только по дефолту, а осознанно.

➡️ @cpp_geek

BY C++ geek


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_geek/328

View MORE
Open in Telegram


C geek Telegram | DID YOU KNOW?

Date: |

If riding a bucking bronco is your idea of fun, you’re going to love what the stock market has in store. Consider this past week’s ride a preview.The week’s action didn’t look like much, if you didn’t know better. The Dow Jones Industrial Average rose 213.12 points or 0.6%, while the S&P 500 advanced 0.5%, and the Nasdaq Composite ended little changed.

Telegram announces Search Filters

With the help of the Search Filters option, users can now filter search results by type. They can do that by using the new tabs: Media, Links, Files and others. Searches can be done based on the particular time period like by typing in the date or even “Yesterday”. If users type in the name of a person, group, channel or bot, an extra filter will be applied to the searches.

C geek from vn


Telegram C++ geek
FROM USA